/*
 * Copyright (C) 2007, 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.takaharabooks.mhp3rd;

import com.takaharabooks.mhp3rd.WeakPointGallery.WeakPointImageGetTask;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;  
import android.graphics.Bitmap.Config;  
import android.graphics.Canvas; 
import android.graphics.Rect;
import android.graphics.Color;
import android.text.util.Linkify;
import android.text.Html;
// view
import android.view.Display;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Spinner;
import jp.co.nobot.libAdMaker.libAdMaker;
// Dialog
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.os.Handler;
import android.os.Message;
import android.text.TextPaint;


public class QuestGallery extends Activity implements Runnable 
{
	//**********************定数定義*************************
	// 背景用一マスのサイズ
	public final static int MISSION_NONE				= 0;
	public final static int MISSION_CORNER_ONE			= 1;
	public final static int MISSION_CORNER_TWO			= 2;
	public final static int MISSION_CORNER_THREE		= 3;
	public final static int MISSION_CORNER_FOUR			= 4;
	
	//public final static int TEXT_VIEW_ABC_TBL[] = {
	//	R.id.TextView00,
	//	R.id.TextView01,
	//	R.id.TextView02,
	//	R.id.TextView03,
	//	R.id.TextView04,
	//	R.id.TextView05,
	//	R.id.TextView06,
	//	R.id.TextView07
	//};
	
	//******************************************************

	// 広告クラス
	private ConbinateAdView m_csAd;
	
	  private QuestInfoImageAdapter m_csAdapter;
	  private TextView  m_csNumberText;
	  //private TextView[]  m_csABCText;
	  //static private int m_nABCViewID = R.id.TextView00;
	  Bitmap m_selectedBitmap;
	  // 絞り込み用
	  private Spinner m_csKindSpinner;
	  private Spinner m_csStarSpinner;
	  private int m_nSelectedKind = 1;
	  private int m_nSelectedStar = 1;
	  
	  // プログレスダイアログ
	  static private ProgressDialog waitDialog = null;
	    
	  // DB
	  private DB_QuestGallery m_dbQuest = null;
      
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quest_gallery);   
        
        // 広告表示
        m_csAd = new ConbinateAdView( (ProgressBar)findViewById(R.id.loading2) );
        m_csAd.InitAdMaker((libAdMaker)findViewById(R.id.admakerview2), this);
        m_csAd.showAdMaker();
        
        // 画像ギャラリーから選択された画像を表示するイメージビュー
    	m_csNumberText = (TextView) findViewById(R.id.NumberText);

    	// もしまだ表示されていたら消去
    	dismissProgressDlg();
    	
        // 読み込み中のプログレスダイアログを表示
        waitDialog = new ProgressDialog(this);
        waitDialog.setTitle("Loading...");
        waitDialog.setMessage("データ読み込み中です。\nしばらくお待ちください...");
        waitDialog.setIndeterminate(false);
        waitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        waitDialog.show();
        
		// 処理開始
        Thread thread = new Thread(this);
        thread.start();
        
   	}
    
    // プログレスダイアログの削除
    private void dismissProgressDlg()
    {
		if(waitDialog != null && waitDialog.isShowing()){
			waitDialog.dismiss();
			waitDialog = null;
		}
    }
    
    @Override
    public void onStart()
    {

        super.onStart();
    }
    
    @Override
    public void onPause()
    {
    	dismissProgressDlg();
    	super.onPause();
    }
    
    @Override
    public void onDestroy(){
    	if( null != m_dbQuest ){
    		m_dbQuest.CloseDB();    	
    	}
    	super.onDestroy();
    }
    
    @Override
	public void run()
    {
        // 時間のかかる処理をここに記述。    	
        // データベースを作成
    	if( null == m_dbQuest ){
    		m_dbQuest = new DB_QuestGallery(this); 
    		m_dbQuest.InitDB();	                    
    	}

        handler.sendEmptyMessage(0);
    }
    
    private Handler handler = new Handler()
    {
        @Override
		public void handleMessage(Message msg) {
            // 処理終了時の動作をここに記述。
        	
        	// 初期化
        	InitAllView();
    		
        	// プログレスダイアログの削除
        	dismissProgressDlg();
    		
    		// アップデート時のメッセージを表示します
    		if(m_dbQuest.m_bUpdateFlag){
    			ShowUpdateMessage();
    		}
        }
    };
    
    // すべてのViewを初期化
    private void InitAllView()
    {
  		// 全種別を表示できるように初期化
  		m_nSelectedKind = 1;
  		m_nSelectedStar = 1;
    	
        // ギャラリー初期
  		InitGallery();
  		
    	// 名前順に絞込みできるようにする
  		InitStarSpinner();
        
  		// モンスター種別に絞込みできるようにする
  		InitKindSpinner();
  		
    }
    
    /*************************************
     * アップデート時の１回だけメッセージを表示
     **************************************/
    private void ShowUpdateMessage()
    {
    	String strMessage = String.format(
    			"【Ver.5.4.1】" + 
    			"\n" +
    			"\n" +
    			"①イベントクエストの報酬の間違い修正\n" + 
    			"\n" +
    			"\n"
    	);
    	
    	//TextView csDlgTextView = new TextView(this);
    	//csDlgTextView.setAutoLinkMask(Linkify.WEB_URLS);
    	//csDlgTextView.setText(strHtml);
    	
    	new AlertDialog.Builder(this)
    	.setTitle("アップデート情報")
    	.setMessage(strMessage)
    	.setPositiveButton("OK", null)  
    	.show();  
    }
    
    /**
     * メニューを作成する
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);

        // タイトルメニューの作成
        MenuItem csMenu1 = menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, "タイトルへ");
        csMenu1.setIcon(android.R.drawable.ic_menu_revert);
        MenuItem csMenu2 = menu.add(Menu.NONE, Menu.FIRST+1, Menu.NONE, "フルスクリーン");
        csMenu2.setIcon(android.R.drawable.ic_menu_view);
        MenuItem csMenu3 = menu.add(Menu.NONE, Menu.FIRST+2, Menu.NONE, "アップデート情報");
        csMenu3.setIcon(android.R.drawable.ic_menu_upload);
        
        return true;
    }
   /**
     * メニューボタン押下時の処理
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem menu)
    {
        switch (menu.getItemId()) {
        case Menu.FIRST:
            //Activity終了
            finish();
            return true;
        case Menu.FIRST+1:
            //フルスクリーン処理
        	if(0 == (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN)){
	        	getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
	        	menu.setTitle("通常の画面");
        	}else{
                //フルスクリーンなら元に戻す
	        	getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
	        	menu.setTitle("フルスクリーン");
        	}
            return true;
        case Menu.FIRST+2:
            //アップデート情報
        	ShowUpdateMessage();
            return true;
        default:
            break;
        }
        
        return super.onOptionsItemSelected(menu);
    }
    
    /*************************************
     * ギャラリーを作成しなおします
     **************************************/
    public void RemakeGallery(int nPos)
    {
    	InitGallery();
        SetItemSelect(nPos);    	
    }
        
    /*************************************
     * ギャラリーの初期化
     **************************************/
    public void InitGallery()
    {
        // アダプタ
        m_csAdapter = new QuestInfoImageAdapter(this);
    	
    	// Reference the Gallery view
        Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setVisibility(View.VISIBLE);
        // Set the adapter to our custom adapter (below)
        g.setAdapter(new QuestInfoImageAdapter(this));
        
        // 選択処理
        g.setOnItemSelectedListener( new OnItemSelectedListener() {
        	@Override
            public void onItemSelected(AdapterView parent, View v, int position, long id) {
        		SetItemSelect(position);
            }
        	@Override
        	public void onNothingSelected(AdapterView parent){
        	}
        });
        
        // 長押し処理
        g.setOnItemLongClickListener( new OnItemLongClickListener()
        {
        	@Override
            public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id)
        	{
        		//m_nGalleryPosition = position;
        		//ShowDialogForGallery();
        		
        		return false;
        	}
        });
        
        registerForContextMenu(g);
    }
    
    /*************************************
     * モンスター画像選択アクティビティを表示
     **************************************/
    public void IntentMonsterWeakPoint(String strMonsterName)
    {
    	String strName = strMonsterName;//(String)m_csAdapter.getMonsterName(nPosition);
    	String[] strName2 = strName.split("\n");
    	String[] strName3 = strName2[0].split(" ");
    	String[] strName4 = strName3[0].split("　");
    	String[] strName5 = strName4[0].split("\\(");
    	
		Intent intent = new Intent();
        intent.setClassName(
               "com.takaharabooks.mhp3rd",
                "com.takaharabooks.mhp3rd.MonsterMaterialListActivity");
        intent.putExtra("NAME", strName5[0]);
        startActivityForResult(intent, 0);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        //if (requestCode == SHOW_EDITOR) {
            if (resultCode > 0) {
            	Bundle extras = data.getExtras(); 
            	if (extras != null){
	            	int nLand = extras.getInt("LAND");
	            	if(nLand == getResources().getConfiguration().orientation){
	            		m_dbQuest.SetDB(m_nSelectedKind, m_nSelectedStar);
		            	// ギャラリー初期
		            	RemakeGallery(requestCode);
	            	}
            	}
          	}
        //}
    }
    
    /*************************************
     * モンスター種族絞込み機能の初期化
     **************************************/
    public void InitKindSpinner()
    {
    	// スピナーボタンに表示するテキスト
    	ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
    	// スピナーを押したときに表示されるドロップダウンアイテム
    	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    	
    	// ｱｲﾃﾑ種別を追加
    	int nTableNum = m_dbQuest.m_stStrQuestMainCategory.length;
    	for(int nIndex=0; nIndex<nTableNum; nIndex++){
    		adapter.add(m_dbQuest.m_stStrQuestMainCategory[nIndex]);
    	}    	
    	
  		m_csKindSpinner = (Spinner) findViewById(R.id.QuestKindSpinner);
  		m_csKindSpinner.setAdapter(adapter);
  		m_csKindSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
  		{  			
  			@Override
    		public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
    			// データベースを作り変える
  				m_nSelectedKind = (int)id+1;
  				m_nSelectedStar = 1;
  				m_dbQuest.SetDB(m_nSelectedKind, m_nSelectedStar);
  				// スピナー再作成
  				InitStarSpinner();
    	    	m_csStarSpinner.setSelection(0);
    	    	// ギャラリーを作り直す
    	    	RemakeGallery(0);
    		}
  			
  			@Override
  			public void onNothingSelected(AdapterView<?> arg0) {
            }
    	});    	
    }
    
    /*************************************
     * モンスター名前絞込み機能の初期化
     **************************************/
    public void InitStarSpinner()
    {
    	// スピナーボタンに表示するテキスト
    	ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
    	// スピナーを押したときに表示されるドロップダウンアイテム
    	adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    	
    	// ｱｲﾃﾑ種別を追加
    	String[] strStar = GetQuestStarCategoryStrArray();
    	int nTableNum = strStar.length;
    	for(int nIndex=0; nIndex<nTableNum; nIndex++){
       		adapter.add(strStar[nIndex]);
    	}    	
    	
    	m_csStarSpinner = (Spinner) findViewById(R.id.QuestStarSpinner);
    	m_csStarSpinner.setAdapter(adapter);
    	m_csStarSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
  		{  			
  			@Override
    		public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
    			// データベースを作り変える
    	    	int nNum = (int)id+1;
    	    	m_nSelectedStar = nNum;
    	    	m_dbQuest.SetDB(m_nSelectedKind, m_nSelectedStar);
    	    	// ギャラリーを作り直す
    	    	RemakeGallery(0);
    		}
  			
  			@Override
  			public void onNothingSelected(AdapterView<?> arg0) {
            }
    	});
    }
    
    /*************************************
     * サブカテゴリ（クエストの星の数）の文字列配列を取得
     **************************************/
    public String[] GetQuestStarCategoryStrArray()
    {
    	String[] strRet = {""};
    	if( DB_QuestGallery.QUEST_CATEGORY_VILLEDGE == m_nSelectedKind ){
    		strRet = m_dbQuest.m_stStrQuestStarCategory;
    	}else if( DB_QuestGallery.QUEST_CATEGORY_PARK_LOWER == m_nSelectedKind ){
    		strRet = m_dbQuest.m_stStrQuestStarCategory2;
    	}else if( DB_QuestGallery.QUEST_CATEGORY_PARK_HIGHER == m_nSelectedKind ){
    		strRet = m_dbQuest.m_stStrQuestStarCategory3;
    	}else if( DB_QuestGallery.QUEST_CATEGORY_EVENT == m_nSelectedKind ){
    		strRet = m_dbQuest.m_stStrQuestStarCategory4;
    	}
    	return strRet;
    }
    
    // クエスト情報をセット
    public void SetItemSelect(int position)
    {
        // セッティング
        TextView QuestTitleTextView = (TextView) findViewById(R.id.QuestTitleTextView);
        TextView QuestMonsterTextView = (TextView) findViewById(R.id.QuestMonsterTextView);
        TextView QuestKindTextView = (TextView) findViewById(R.id.QuestKindTextView);
        TextView QuestMapTextView = (TextView) findViewById(R.id.QuestMapTextView);
        TextView QuestPurposeTextView = (TextView) findViewById(R.id.PurposeTextView);
        TextView QuestMoneyTextView = (TextView) findViewById(R.id.QuestMoneyTextView);
        TextView QuestTradeMoneyTextView = (TextView) findViewById(R.id.QuestTradeMoneyTextView);
        TextView QuestTimeTextView = (TextView) findViewById(R.id.QuestTimeTextView);
        
        // サイズ調整
        int nWidth = GetWindowWidthSize();
        QuestMoneyTextView.setWidth(nWidth/2);
        QuestTradeMoneyTextView.setWidth(nWidth/2);
        QuestTimeTextView.setWidth(nWidth/2);
        
        QuestTitleTextView.setText((String)m_csAdapter.getItem(position));
        QuestMonsterTextView.setText(Html.fromHtml((String)m_csAdapter.getQuestMonsterStr(position)));
        QuestKindTextView.setText(Html.fromHtml((String)m_csAdapter.getQuestKindStr(position)));
        QuestMapTextView.setText(m_csAdapter.getQuestMapStr(position));
        QuestPurposeTextView.setText( Html.fromHtml(m_csAdapter.getQuestPurposeStr(position) + "<br>" + 
        							  m_csAdapter.getQuestMemoStr(position)) );

        // キークエセット
        SetQuestKeyTextView(position);
        // クエスト素材
        SetQuestMaterialTextView(position);
        // イメージのセット
        SetQuestMonsterImageView(position);
        
        // 金額＆時間セット        
        QuestMoneyTextView.setText(MakeMoneyString("報酬金", m_csAdapter.getQuestMoney(position)));
        QuestTradeMoneyTextView.setText(MakeMoneyString("契約金", m_csAdapter.getQuestTradeMoney(position)));
        QuestTimeTextView.setText(MakeTimeString(m_csAdapter.getQuestTime(position)));

        
    	// 説明文を表示
		//SetDescriptionText(m_selectedImageView, position);
		// 数をセット
		String strNum = "" + (position+1) + "/" + m_csAdapter.getCount();
		m_csNumberText.setText(strNum);
		
		// イメージビューが押されたときの動作
		// 　クリック時は作者名を表示する
		ImageView csImageView = new ImageView(this);
		csImageView.setOnClickListener(new View.OnClickListener()
    	{
			@Override
			public void onClick(View v) {
				IntentMonsterWeakPoint("アオアシラ");
			}
		});
    }
    
    /*************************************
     * 金額をセット
     **************************************/
    public String MakeMoneyString(String strName, int nMoney)
    {
        String strMoney = String.format("%s：%6dz", strName, nMoney);
        return strMoney;
    }

    /*************************************
     * 制限時間をセット
     **************************************/
    public String MakeTimeString(int nTime)
    {
        String strTime = String.format("制限時間：%3d分", nTime);
        return strTime;
    }

    /*************************************
     * 画面サイズ（幅）を取得
     **************************************/
    public int GetWindowWidthSize()
    {
        WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE);
        Display disp = windowmanager.getDefaultDisplay();
        return disp.getWidth();
    }

    /*************************************
     * ダイアログの表示
     **************************************/
    public void ShowImageViewDialogA(String strName, String strURL)
    {
    	String strHtml = String.format("%s\n%s", strName, strURL);
    	
    	TextView csDlgTextView = new TextView(this);
    	csDlgTextView.setAutoLinkMask(Linkify.WEB_URLS);
    	csDlgTextView.setText(strHtml);
    	
    	new AlertDialog.Builder(this)
    	.setTitle("作者")
    	.setIcon(android.R.drawable.ic_menu_edit)
    	.setView(csDlgTextView)  
    	.setPositiveButton("OK", null)  
    	.show();  
    }
        
    // 長押し時の処理
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        //menu.add(R.string.str_weakpoint);
    }
    
    // アイテム選択時の処理
    @Override
    public boolean onContextItemSelected(MenuItem item) {
//        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
//        Toast.makeText(this, "Longpress: " + info.position, Toast.LENGTH_SHORT).show();
        return true;
    }

    /*************************************
     * ビットマップを指定の大きさにリサイズします
     * [I-O]csBmp:リサイズする画像
     * [IN.]nW：横幅
     * [IN.]nH:縦幅（０の場合、横幅の倍率に合わせてリサイズ）
     * return: リサイズした画像を返す
     **************************************/
    public Bitmap ResizeBitmap(Bitmap csBmp, int nW, int nH){
        int width = csBmp.getWidth();
        int height = csBmp.getHeight();
        int newWidth = nW;
        int newHeight = nH;

        // calculate the scale - in this case = 0.4f
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        if(newHeight == 0){
        	scaleHeight = scaleWidth;
        }

        // createa matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);
        // rotate the Bitmap
        //matrix.postRotate(45);

        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(csBmp, 0, 0,
                          width, height, matrix, true);
        csBmp = resizedBitmap;

        return resizedBitmap;
    }
    
    /*************************************
     * 数値に対応した☆文字列を生成して取得
     **************************************/
    public void SetQuestKeyTextView(int position)
    {
        int nKey = m_csAdapter.getQuestKey(position);
        TextView QuestKeyTextView = (TextView) findViewById(R.id.QuestKeyTextView);
    	
        String strKeyText = "";
        if(nKey == 1){
        	strKeyText = String.format("<font color=#ccaa00>キー\nクエ</font>");
        }else if(nKey == 2){
        	strKeyText = String.format("<font color=red>緊急\nクエ</font>");
        }else if(nKey == 3){
        	strKeyText = String.format("<font color=black>△</font>");
        }else{
        	strKeyText = String.format("");
        }
        QuestKeyTextView.setText(Html.fromHtml(strKeyText));
    }
    
    /*************************************
     * ｸｴｽﾄ素材のテキストをセット
     **************************************/
    public void SetQuestMaterialTextView(int position)
    {
        TextView QuestMaterialTextView = (TextView) findViewById(R.id.QuestMaterialTextView);

        // ＤＢからデータを取得
        m_csAdapter.DBSetQuestMaterial(position);
        
        String strQuestMaterial = "\t\t\t報酬素材<br>";
        int nQuestMaterialNum = m_csAdapter.getQuestMaterialCount();
        String[] strQMName = m_dbQuest.GetQuestMaterialName();
        int[] nQMRate = m_dbQuest.GetQuestMaterialRate();
        int[] nQMNum = m_dbQuest.GetQuestMaterialNum();
        
        // テキスト生成
        for(int nIndex=0; nIndex<nQuestMaterialNum; nIndex++){
        	if( nQMRate[nIndex] < 0 )	strQuestMaterial += "<font color=#44ff44>";
        	strQuestMaterial += String.format("%3d%%\t%2d個\t\t%s<br>", 
        						Math.abs(nQMRate[nIndex]), nQMNum[nIndex],
        						strQMName[nIndex]);
        	if( nQMRate[nIndex] < 0 )	strQuestMaterial += "</font>";
        }
        
    	QuestMaterialTextView.setText(Html.fromHtml(strQuestMaterial));
    }
    
    /*************************************
     * モンスターのイメージをセット
     **************************************/
    int m_nUserID;
    public void SetQuestMonsterImageView(int position)
    {
    	RelativeLayout csLayout = (RelativeLayout) findViewById(R.id.ScrollImageRelativeLayout);
		csLayout.removeAllViews();

        // ＤＢからデータを取得
        boolean bRet = m_csAdapter.DBSetQuestMonster(position);
    	if(!bRet) return;
        
    	int[] nUserID = m_dbQuest.GetQuestMonsterUserID();
        String[] strImgName = m_dbQuest.GetQuestMonsterImageName();
    	int nMonsterNum = m_csAdapter.getQuestMonsterCount();
    	ImageView[] csListViews = new ImageView[nMonsterNum];      
        
        // イメージ生成
    	Bitmap csBitmap;

    	//m_selectedImageView.setImageBitmap(m_selectedBitmap);

        for(int nIndex=0; nIndex<nMonsterNum; nIndex++)
        {
        	m_nUserID = nUserID[nIndex];
        	csListViews[nIndex] = new ImageView(this);
        	//csBitmap = BitmapFactory.decodeResource( getResources(), nImgID[nIndex] );
        	String strFilePath = getResources().getString(R.string.SD_DIR_PATH) + strImgName[nIndex] + ".jpg";
        	csBitmap = BitmapFactory.decodeFile(strFilePath, new BitmapFactory.Options());
            if(null == csBitmap){
            	csBitmap = BitmapFactory.decodeResource( getResources(), R.drawable.m_noimage );
            }
        	//ResizeBitmap(csBitmap, 100, 0);
        	csListViews[nIndex].setImageBitmap(csBitmap);
        	csListViews[nIndex].setOnClickListener(new View.OnClickListener()
        	{
        		private int m_nViewUserID = m_nUserID;
    			@Override
    			public void onClick(View v) {
    				// 弱点早見表を起動
    				IntentMonsterWeakPoint(m_nViewUserID);
    			}
    		});
        	csListViews[nIndex].setId(nIndex+1);
        	// 再読み込み処理を追加
        	csListViews[nIndex].setTag(strImgName[nIndex]);
            // AsyncTaskは１回しか実行できない為、毎回インスタンスを生成
        	QuestImageGetTask task = new QuestImageGetTask(csListViews[nIndex], strImgName[nIndex], this);
            task.execute(strFilePath);
        	RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(120, 120);
        	if(nIndex>0) param.addRule(RelativeLayout.RIGHT_OF, nIndex); 
        	csLayout.addView(csListViews[nIndex], param);
        }
    }
    
    /*************************************
     * モンスター画像選択アクティビティを表示
     **************************************/
    public void IntentMonsterWeakPoint(int nUserID)
    {
		Intent intent = new Intent();
        intent.setClassName(
               "com.takaharabooks.mhp3rd",
                "com.takaharabooks.mhp3rd.WeakPointGallery");
        intent.putExtra("ID", nUserID);
        startActivity(intent);
    }
        
    /*************************************
     * ImageAdapter（ギャラリーの画像処理を行う）
     **************************************/
    public class QuestInfoImageAdapter extends BaseAdapter
    {
        int mGalleryItemBackground;

        public QuestInfoImageAdapter(Context c) {
            mContext = c;

            // See res/values/attrs.xml for the <declare-styleable> that defines
            // Gallery1.
            TypedArray a = obtainStyledAttributes(R.styleable.MissionGallery);
            mGalleryItemBackground = a.getResourceId(
                    R.styleable.MissionGallery_android_galleryItemBackground, 0);
            a.recycle();
        }
        
        @Override
		public int getCount() {
            return m_dbQuest.GetQuestDataNum();
        }        
        
		// クエストの素材数
		public int getQuestMaterialCount() {
            return m_dbQuest.GetQuestMaterialDataNum();
        }        
        
		// モンスターのイメージ数
		public int getQuestMonsterCount() {
            return m_dbQuest.GetQuestMonsterDataNum();
        }        
        
        @Override
		public Object getItem(int position) {
       		return m_dbQuest.GetQuestTitleStr(position);
        }
        
        /*************************************
         * キークエ取得
         **************************************/
        public int getQuestNo(int position){
        	return m_dbQuest.GetQuestKey(position);
        }

        /*************************************
         * キークエ取得
         **************************************/
        public int getQuestKey(int position){
        	return m_dbQuest.GetQuestKey(position);
        }

        /*************************************
         * クエストモンスター名取得
         **************************************/
        public String getQuestMonsterStr(int position){
        	return m_dbQuest.GetQuestMonsterStr(position);
        }

        /*************************************
         * マップ情報取得
         **************************************/
        public String getQuestMapStr(int position){
        	return m_dbQuest.GetQuestMapStr(position);
        }

        /*************************************
         * ｸｴｽﾄ種別取得
         **************************************/
        public String getQuestKindStr(int position){
        	return m_dbQuest.GetQuestKindStr(position);
        }

        /*************************************
         * 成功条件取得
         **************************************/
        public String getQuestPurposeStr(int position){
        	return m_dbQuest.GetQuestPurpose(position);
        }

        /*************************************
         * クエスト情報（備考）取得
         **************************************/
        public String getQuestMemoStr(int position){
        	return m_dbQuest.GetQuestMemo(position);
        }

        /*************************************
         * 報酬金取得
         **************************************/
        public int getQuestMoney(int position){
        	return m_dbQuest.GetQuestMoney(position);
        }

        /*************************************
         * 契約金取得
         **************************************/
        public int getQuestTradeMoney(int position){
        	return m_dbQuest.GetQuestTradeMoney(position);
        }

        /*************************************
         * 制限時間取得
         **************************************/
        public int getQuestTime(int position){
        	return m_dbQuest.GetQuestTime(position);
        }
        
        /*************************************
         * DBからクエスト素材をセット
         **************************************/
        public boolean DBSetQuestMaterial(int position){
        	return m_dbQuest.SetQuestMaterialDB(position);
        }
        
        /*************************************
         * DBからクエストモンスター情報をセット
         **************************************/
        public boolean DBSetQuestMonster(int position){
        	return m_dbQuest.SetQuestMonsterDB(position);
        }
        
        @Override
		public long getItemId(int position) {
            return position;
        }

        @Override
		public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i;
            
            if (convertView == null) {
            	i = new ImageView(mContext);
            	
	            // クエストタイトルのイメージを作成
	            i.setImageBitmap( getBitmapForGallery(position) );
	            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
	            i.setLayoutParams(new Gallery.LayoutParams(100, 100));
	
	            // The preferred Gallery item background
	            i.setBackgroundResource(mGalleryItemBackground);
            }else{
            	i = (ImageView)convertView;
            }

            return i;
        }
        
        /*************************************
         * ギャラリー用モンスター名（画像）の取得
         **************************************/
        public Bitmap getBitmapForGallery(int nPosition)
        {
        	Bitmap csBmp = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
        	Canvas csCanvas = new Canvas(csBmp);
        	
      		String strText = (String)getItem(nPosition);
    		TextPaint paintText = new TextPaint();
            paintText.setTextSize(18);
            
            // 背景セット
            paintText.setColor(Color.argb(255, 255, 255, 255));
        	csCanvas.drawRect(new Rect(0, 0, 100, 100), paintText);
            
            // 文字セット
            int nMax=0;
            paintText.setColor(Color.argb(255, 80, 80, 255));
            if( 0 < strText.length() ){
            	nMax = Math.min(strText.length(), 5);
            	csCanvas.drawText(strText, 0, nMax, 5, csBmp.getHeight()/10*4-10, paintText);
            }
            if( 5 <= strText.length() ){
            	nMax = Math.min(strText.length(), 10);
            	csCanvas.drawText(strText, 5, nMax, 8, csBmp.getHeight()/10*7-10, paintText);
            }
            if(10 <= strText.length() ){
            	nMax = Math.min(strText.length(), 15);
                csCanvas.drawText(strText, 10, nMax, 11, csBmp.getHeight()/10*10-10, paintText);
            }
            // キークエor緊急クエ
        	if( getQuestKey(nPosition) == 1 ){
                paintText.setColor(Color.argb(255, 255, 200, 0));        		
            	csCanvas.drawText("★", 2, 14, paintText);        		
        	}else if( getQuestKey(nPosition) == 2 ){
                paintText.setColor(Color.argb(255, 255, 0, 0));        		
            	csCanvas.drawText("★", 2, 14, paintText);        		
        	}else if( getQuestKey(nPosition) == 3 ){
                paintText.setColor(Color.argb(255, 0, 0, 0));        		
            	csCanvas.drawText("☆", 2, 14, paintText);        		
        	}
    		//canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null);
        	
    		return csBmp;
        }
        
        /*************************************
         * 画像のセット
         **************************************/
        public void setImage(int nImgID, int nPosition)
        {
        	
        }

        private Context mContext;
        
    }

    /*************************************
     *************************************
     * ＳＤからよみこみ処理をするクラス
     **************************************
     **************************************/
    class QuestImageGetTask extends ImageGetTask
    {
        public QuestImageGetTask(ImageView _image, String strImageFName, Context context ) {
            //対象の項目を保持しておく
        	super(_image, strImageFName, context);
        }
     
       @Override
        protected void onPostExecute(Bitmap result) {
            // Tagが同じものか確認して、同じであれば画像を設定する
            // （Tagの設定をしないと別の行に画像が表示されてしまう）
            if(tag.equals(image.getTag())){
                if(result!=null){
                    //画像の設定
                	image.setImageBitmap(ResizeBitmap(result, 100, 100));
                }
                else{
                    //エラーの場合は×印を表示
                    //image.setImageDrawable(getResources().getDrawable(R.drawable.x));
                }
                //プログレスバーを隠し、取得した画像を表示
                image.setVisibility(View.VISIBLE);
            }
        }

    }    
    
}
